﻿// 4626. 最小移动距离.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://www.acwing.com/problem/content/4629/

平面上有 n
 个点，编号为 1∼n
。

对于每个点 i
（1≤i≤n
），都存在一条从点 i
 到点 ai
（1≤ai≤n
，ai
 可以等于 i
）的有向边。

所有边的长度均为 1
。

请你判断是否存在一个最小移动距离 t
（t≥1
），使得：

我们规定，如果从点 u
 出发，移动 t
 单位长度距离后，到达点 v
，就称点 v
 是点 u
 的目标点。注意，一个点的目标点也可能是它自己。
对于图中的每个点 x
，如果点 y
 是点 x
 的目标点，则点 x
 也必须是点 y
 的目标点。
如果存在这样的 t
，请你输出 t
 的最小可能值，否则请你输出 -1。

输入格式
第一行包含一个整数 n
。

第二行包含 n
 个整数 a1,a2,…,an
。

输出格式
如果存在满足条件的 t
（t≥1
），则输出一个正整数，表示 t
 的最小可能值。

否则输出 -1。

数据范围
前 3
 个测试点满足 1≤n≤4
。
所有测试点满足 1≤n≤100
，1≤ai≤n
。

输入样例1：
4
2 3 1 4
输出样例1：
3
输入样例2：
4
4 4 4 4
输出样例2：
-1
输入样例3：
4
2 1 4 3
输出样例3：
1
*/
#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

 